package com.thesis.manage.common.service;

import com.github.pagehelper.PageInfo;
import com.thesis.manage.common.entity.AbstractBaseEntity;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;


/**
 * @author php
 * @date 2018/1/16
 */
public interface BaseService<T extends AbstractBaseEntity> {
    /**
     * 分页查询
     *
     * @param pageable 分页参数
     * @return pageInfo
     */
    PageInfo<T> list(final Pageable pageable);

    /**
     * 逻辑删除
     *
     * @param id 主键
     */
    @Transactional(rollbackFor = Exception.class)
    void delete(final Long id);

    /**
     * 通过主键查询
     *
     * @param id 主键
     * @return T
     */
    T findById(final Long id);

    /**
     * 通过实例查询一条数据
     *
     * @param t 实例对象
     * @return T
     */
    T findByOne(final T t);

    /**
     * 保存对象（添加或修改）
     *
     * @param t 实例
     * @return id
     */
    @Transactional(rollbackFor = Exception.class)
    Integer save(final T t);

    /**
     * 分页查询（带参数）
     *
     * @param t        对象实体
     * @param pageable 分页参数
     * @return pageInfo
     */
    PageInfo<T> list(T t, Pageable pageable);
}
